// import { cosh } from 'core-js/core/number';
import Vue from 'vue';
import Vuex from 'vuex'; //引用

Vue.use(Vuex);
const moduleA = {
    state: {
        name: 'moduleA'
    },
    mutations: {
        aaa(state) {
            state.name = 'wangfafa';
        }
    },
    actions: {},
    getters: {}
};
const moduleB = {
    state: {
        name: 'moduleB'
    },
    mutations: {},
    actions: {},
    getters: {}
};
const moduleC = {
    state: {
        name: 'moduleC'
    },
    mutations: {},
    actions: {},
    getters: {}
};
//实力化vuex
let store = new Vuex.Store({
    // state：vuex存数据的地方 相当于我们vue实例的data
    state: {
        num: 1,
        list: [
            {
                id: 1,
                name: '张三',
                age: 18
            },
            {
                id: 2,
                name: '李四',
                age: 21
            },
            {
                id: 3,
                name: '唐麻子',
                age: 30
            },
            {
                id: 4,
                name: '王发发',
                age: 25
            }
        ],
        info: {
            name: '王发发',
            age: 18
        }
    },
    // mutations vuex 存放同步方法的地方且修改state的值只能通过mutations里面的方法修改
    mutations: {
        add(state, val) {
            state.num += val.num;
        },
        addHeights(state) {
            Vue.set(state.info, 'height', 178);
            // setTimeout(() => {
            // Vue.set(state.info, 'height', 178);
            // }, 2000);
            // state.info.height = 178;
        }
    },
    // 相当于我们的计算属性
    getters: {
        getterList(state) {
            // return state.list.filter((item) => item.age > 24);
            return function (val) {
                return state.list.filter((item) => item.age > val);
            };
            //     // return state.list.filter((item) => item.age > 20);//不需要传参 直接操作
            //     return function (val) {
            //         //需要传参 返回一个方法
            //         return state.list.filter((item) => item.age > val);
            //     };
        }
    },
    // 书写异步操作的
    actions: {
        acAdd(context) {
            console.log(context);
            setTimeout(() => {
                context.commit('addHeights');
            }, 2000);
            // setTimeout(() => {
            //     content.commit('addHeights');
            // }, 2000);
        }
    },
    // modules 创建模块 把模块放进我们的模块里面 使用就好 样子很像我们vue的组件注册
    modules: {
        moduleA,
        moduleB,
        moduleC
    }
});
// 导出vuex的实例
export default store;
